Security News
RubyGems.org Adds New Maintainer Role
RubyGems.org has added a new "maintainer" role that allows for publishing new versions of gems. This new permission type is aimed at improving security for gem owners and the service overall.
fast-deep-equal
Advanced tools
The fast-deep-equal package is a fast deep equality comparison library. It allows developers to check if two objects, arrays, or values are deeply equal to each other, meaning that their structure and nested values are identical.
Deep equality check for objects
This feature allows you to compare two objects to determine if they are deeply equal.
const equal = require('fast-deep-equal');
const obj1 = { a: 1, b: { c: 2 } };
const obj2 = { a: 1, b: { c: 2 } };
console.log(equal(obj1, obj2)); // true
Deep equality check for arrays
This feature allows you to compare two arrays to determine if they are deeply equal, including nested arrays.
const equal = require('fast-deep-equal');
const arr1 = [1, 2, [3, 4]];
const arr2 = [1, 2, [3, 4]];
console.log(equal(arr1, arr2)); // true
Deep equality check for values
This feature allows you to compare two primitive values to determine if they are equal.
const equal = require('fast-deep-equal');
const val1 = 'value';
const val2 = 'value';
console.log(equal(val1, val2)); // true
Lodash's isEqual function is a popular utility for performing deep equality checks. It is more feature-rich than fast-deep-equal, handling more edge cases and supporting customizer functions, but it may be slower for simple comparisons due to its comprehensive approach.
The deep-equal package provides a similar deep equality checking functionality. It is less performant than fast-deep-equal but offers a strict comparison mode that uses the === operator for equality checks.
Nano-equal is a minimalistic library for deep equality checks. It is designed to be small and fast, similar to fast-deep-equal, but may not handle as many edge cases.
The fastest deep equal with ES6 Map, Set and Typed arrays support.
npm install fast-deep-equal
ES6 equal (require('fast-deep-equal/es6')
) also supports:
var equal = require('fast-deep-equal');
console.log(equal({foo: 'bar'}, {foo: 'bar'})); // true
To support ES6 Maps, Sets and Typed arrays equality use:
var equal = require('fast-deep-equal/es6');
console.log(equal(Int16Array([1, 2]), Int16Array([1, 2]))); // true
To use with React (avoiding the traversal of React elements' _owner property that contains circular references and is not needed when comparing the elements - borrowed from react-fast-compare):
var equal = require('fast-deep-equal/react');
var equal = require('fast-deep-equal/es6/react');
Node.js v12.6.0:
fast-deep-equal x 261,950 ops/sec ±0.52% (89 runs sampled)
fast-deep-equal/es6 x 212,991 ops/sec ±0.34% (92 runs sampled)
fast-equals x 230,957 ops/sec ±0.83% (85 runs sampled)
nano-equal x 187,995 ops/sec ±0.53% (88 runs sampled)
shallow-equal-fuzzy x 138,302 ops/sec ±0.49% (90 runs sampled)
underscore.isEqual x 74,423 ops/sec ±0.38% (89 runs sampled)
lodash.isEqual x 36,637 ops/sec ±0.72% (90 runs sampled)
deep-equal x 2,310 ops/sec ±0.37% (90 runs sampled)
deep-eql x 35,312 ops/sec ±0.67% (91 runs sampled)
ramda.equals x 12,054 ops/sec ±0.40% (91 runs sampled)
util.isDeepStrictEqual x 46,440 ops/sec ±0.43% (90 runs sampled)
assert.deepStrictEqual x 456 ops/sec ±0.71% (88 runs sampled)
The fastest is fast-deep-equal
To run benchmark (requires node.js 6+):
npm run benchmark
Please note: this benchmark runs against the available test cases. To choose the most performant library for your application, it is recommended to benchmark against your data and to NOT expect this benchmark to reflect the performance difference in your application.
fast-deep-equal package is a part of Tidelift enterprise subscription - it provides a centralised commercial support to open-source software users, in addition to the support provided by software maintainers.
To report a security vulnerability, please use the Tidelift security contact. Tidelift will coordinate the fix and disclosure. Please do NOT report security vulnerability via GitHub issues.
FAQs
Fast deep equal
We found that fast-deep-equal demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
RubyGems.org has added a new "maintainer" role that allows for publishing new versions of gems. This new permission type is aimed at improving security for gem owners and the service overall.
Security News
Node.js will be enforcing stricter semver-major PR policies a month before major releases to enhance stability and ensure reliable release candidates.
Security News
Research
Socket's threat research team has detected five malicious npm packages targeting Roblox developers, deploying malware to steal credentials and personal data.